package net.maku.utils;

import java.io.IOException;  
import java.util.HashMap;  
import java.util.Map;  
   
import org.apache.http.HttpResponse;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.HttpClientBuilder;  
import org.apache.http.util.EntityUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import net.maku.bean.dto.ImgSvrRetDto;
import net.maku.bean.model.MyException;  
   
public class WechatLogin {  
       
    private static final String WECHAT_LOGIN_URL = "https://open.weixin.qq.com/connect/qrconnect?appid=wxe66dcbb285ee1076&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE";  
    
    public static ImgSvrRetDto postData( String url ) {
    	// 定义请求参数和url链接
    	//String url = "https://api.weixin.qq.com/sns/userinfo?openid="+openid;
    	//System.out.println("通过url： "+url);
    	//log.info("通过url： "+url);
    	MultiValueMap<String, Object> params = new LinkedMultiValueMap<String, Object>();
    	//params.add("access_token", token);
    	//String base64_image  = Base64.encodeBase64String(bytes);
    	//params.add("openid", openid );
    	//System.out.println(base64_image );
    	// 创建 HttpHeaders 对象，并设置 Content-Type 为 application/x-www-form-urlencoded
    	HttpHeaders headers = new HttpHeaders();
    	headers.setContentType(MediaType.APPLICATION_JSON);
    	
    	//headers.add("access_token", token);

    	// 使用 MultiValueMap 类型创建请求体，并将参数放入其中
    	HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
    	// 调用 RestTemplate 方法进行请求
    	RestTemplate restTemplate = new RestTemplate();
    	ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
    	// 获取请求结果并处理
    	if ( response.getStatusCode() == HttpStatus.OK ) {
    	    String result = response.getBody();
    	    System.out.println( result );
    	    ImgSvrRetDto dto = JsonUtils.fromJson(result, ImgSvrRetDto.class);
    	    //log.info("图像处理结果: {}", result);
    	    if( dto.getCode()!=200 ) {
    	    	throw new MyException("图像处理处理失败");
    	    }
    	    return dto;
    	}
    	throw new MyException("图像处理异常");
    }
    
    public static void main(String[] args) {  
        // 设置微信登录参数  
        String appId = "wxe66dcbb285ee1076";  
        String redirectUri = "YOUR_REDIRECT_URI";  
        String scope = "snsapi_login";  
        String state = "STATE"; // 用于保持请求和回调的状态，在回调时会在Query Parameter中回传该参数  
           
        // 构造微信登录URL  
        String wechatLoginUrl = buildWechatLoginUrl(appId, redirectUri, scope, state);  
        System.out.println("Wechat Login URL: " + wechatLoginUrl);  
        postData( wechatLoginUrl );
           
        // 跳转到微信登录页面  
        // 在这里，你需要将用户重定向到微信登录页面，以进行身份验证。  
        // 你可以使用Java的HTTP请求库（如Apache HttpClient）发送HTTP重定向请求。  
        // 你也可以使用Java的Web框架（如Spring MVC）来处理HTTP重定向。  
        // 这里只是简单地将URL打印出来，作为示例。  
    }  
       
    private static String buildWechatLoginUrl(String appId, String redirectUri, String scope, String state) {  
        Map<String, String> params = new HashMap<>();  
        params.put("appid", appId);  
        params.put("redirect_uri", redirectUri);  
        params.put("response_type", "code");  
        params.put("scope", scope);  
        params.put("state", state);  
        String queryString = buildQueryString(params);  
        return WECHAT_LOGIN_URL + "?" + queryString;  
    }  
       
    private static String buildQueryString(Map<String, String> params) {  
        StringBuilder queryStringBuilder = new StringBuilder();  
        for (Map.Entry<String, String> entry : params.entrySet()) {  
            queryStringBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");  
        }  
        queryStringBuilder.deleteCharAt(queryStringBuilder.length() - 1); // 删除最后一个"&"字符  
        return queryStringBuilder.toString();  
    }  
       
    // 此处可以添加获取access_token和openid的代码，根据微信开放平台提供的API进行实现。  
    // 可以使用Java的HTTP请求库（如Apache HttpClient）发送HTTP请求，并解析响应结果。  
    // 或者，你可以使用第三方库（如Apache HttpComponents）来简化HTTP请求和响应的处理。  
}

